Applications are currently being developed for implementation on graphics processing units (GPUs) utilizing general purpose programming interfaces. For example, these interfaces may expose the execution units of the GPUs to a programmer and may allow memory accessing and parallel programming. However, current techniques for developing such applications have been associated with various limitations.
For example, certain characteristics of GPUs may differ significantly from central processing units (CPUs). As a result, naively ported CPU programs (e.g., path tracers, etc.) may often perform poorly on GPUs. There is thus a need for addressing these and/or other issues associated with the prior art.
Computer graphics applications may have to process data which exceeds the available memory of the computer. Often the memory constraints are tighter on the GPU than on the CPU. In many instances, some part of this data can be generated procedurally. Computer graphics programs, such as path tracers, may need to access this data in a random and incoherent way. Therefore, naïve implementations, which generate the data procedurally or load parts of the data from a storage device, may perform poorly if no coherency is enforced.